// node class_demo.js
// npx babel-node class_demo.js

let _ = "";
const {log} = console;

// 需要注意的是，子类继承父类时，new.target会返回子类。
let test1 = function(){
    class Rectangle {
        constructor(width, height) {
            log(new.target === Rectangle);
        }
    }

    class Square extends Rectangle {
        constructor(width, height) {
            super(width, height);
        }
    }

    let obj = new Square(3);
};
// test1();

// 利用这个特点，可以写出不能独立使用、必须继承后才能使用的类。
let test2 = function(){
    class Shape {
        constructor() {
            if (new.target === Shape) {
                throw new Error('本类不能实例化');
            }
        }
    }

    class Rectangle extends Shape {
        constructor(width, height) {
            super();
        }
    }

    // let x = new Shape();
    let y = new Rectangle(3, 4);
};
// test2();






